package com.supermarket.product.service.impl;

import java.util.List;

import com.supermarket.common.core.utils.StringUtils;
import com.supermarket.product.domain.ProductAttribute;
import com.supermarket.product.domain.ProductType;
import com.supermarket.product.domain.dto.ProductGoodsDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.supermarket.product.mapper.ProductGoodsMapper;
import com.supermarket.product.domain.ProductGoods;
import com.supermarket.product.service.IProductGoodsService;

/**
 * 商品管理Service业务层处理
 * 
 * @author      
 * @date 2025-07-20
 */
@Service
public class ProductGoodsServiceImpl implements IProductGoodsService 
{
    @Autowired
    private ProductGoodsMapper productGoodsMapper;

    /**
     * 查询商品管理
     * 
     * @param id 商品管理主键
     * @return 商品管理
     */
    @Override
    public ProductGoods selectProductGoodsById(Long id)
    {
        return productGoodsMapper.selectProductGoodsById(id);
    }

    /**
     * 查询商品管理列表
     * 
     * @param productGoods 商品管理
     * @return 商品管理
     */
    @Override
    public List<ProductGoods> selectProductGoodsList(ProductGoods productGoods)
    {
        return productGoodsMapper.selectProductGoodsList(productGoods);
    }

    /**
     * 新增商品管理
     * 
     * @param productGoodsVo 商品管理
     * @return 结果
     */
    @Override
    public int insertProductGoods(ProductGoodsDto productGoodsVo)
    {
        //获取商品标题
        String title = productGoodsVo.getTitle();
        //调用方法
        validateShortTitle(title);
        //使用Valid校验
        int i = productGoodsMapper.insertProductGoods(productGoodsVo);
        //添加到商品图片表
        productGoodsMapper.addGoods(i,productGoodsVo.getImgUrl().toString());

        return 0;
    }

    /**
     * 商品标题必填 后端校验规则
     * 最多20个字符
     * 最多10个汉字
     * 必须包含数字
     * @param shortTitle
     */
    public void validateShortTitle(String shortTitle) {
        if (StringUtils.isEmpty(shortTitle)) {
            throw new IllegalArgumentException("请输入商品名称，最多支持20个字符，10个汉字，且必须包含数字。");
        }
        if (shortTitle.length() > 20) {
            throw new IllegalArgumentException("请输入商品名称，最多支持20个字符，10个汉字，且必须包含数字。");
        }
        int chineseCount = (int) shortTitle.chars()
                .filter(c -> c >= 0x4E00 && c <= 0x9FA5)
                .count();
        if (chineseCount > 10) {
            throw new IllegalArgumentException("请输入商品名称，最多支持20个字符，10个汉字，且必须包含数字。");
        }
        if (!shortTitle.matches(".*\\d.*")) {
            throw new IllegalArgumentException("请输入商品名称，最多支持20个字符，10个汉字，且必须包含数字。");
        }
    }

    /**
     * 修改商品管理
     * 
     * @param productGoodsVo 商品管理
     * @return 结果
     */
    @Override
    public int updateProductGoods(ProductGoodsDto productGoodsVo)
    {
        //获取商品标题
        String title = productGoodsVo.getTitle();
        //调用方法
        validateShortTitle(title);
        //使用Valid校验
        int i = productGoodsMapper.updateProductGoods(productGoodsVo);
        //修改商品图片表
        productGoodsMapper.updImgUrlGoods(i ,productGoodsVo.getImgUrl().toString(),productGoodsVo.getId());
        return 0;
    }

    /**
     * 批量删除商品管理
     * 
     * @param ids 需要删除的商品管理主键
     * @return 结果
     */
    @Override
    public int deleteProductGoodsByIds(Long[] ids)
    {
        return productGoodsMapper.deleteProductGoodsByIds(ids);
    }

    /**
     * 删除商品管理信息
     * 
     * @param id 商品管理主键
     * @return 结果
     */
    @Override
    public int deleteProductGoodsById(Long id)
    {
        return productGoodsMapper.deleteProductGoodsById(id);
    }
    /**
     * 获取商品类型下拉
     */
    @Override
    public List<ProductType> getTypeList() {
        return productGoodsMapper.getTypeList();
    }
    /**
     * 获取选择属性下拉
     */
    @Override
    public List<ProductAttribute> getAttributeNameListAll() {
        return productGoodsMapper.getAttributeNameListAll();
    }

    @Override
    public List<ProductGoods> getGoodsList() {
        return productGoodsMapper.getGoodsList();
    }
}
